package com.core.ingenium.model;

import java.io.Serializable;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@NamedQueries
({ 
    @NamedQuery(name = "Estudiante.findAll", query = "select o from Estudiante o"),
    @NamedQuery(name = "Estudiante.findByIdentificacion", query = "select o from Estudiante o where o.identificacion = :pidentificacion"), 
    @NamedQuery(name = "Estudiante.findByFiltro", query = "select o from Estudiante o where o.nombre like :pfiltro or o.apellido1 like :pfiltro or o.apellido2 like :pfiltro")

})
@Table(name = "\"estudiante\"")
public class Estudiante implements Serializable {
    @Column(name = "apellido1")
    private String apellido1;
    @Column(name = "apellido2")
    private String apellido2;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private int id;
    @Column(name = "identificacion")
    private String identificacion;
    @Column(name = "nombre")
    private String nombre;
    @OneToMany(mappedBy = "estudiante")
    private List<EstudiantePlantilla> lstEstudiantePlantilla;
    @ManyToOne
    @JoinColumn(name="carreraNivel")    
    private CarreraNivel carreraNivel;
    public Estudiante() {
    }

    public Estudiante(String apellido1, String apellido2, CarreraNivel carreraNivel, int id, String identificacion,
                      String nombre) {
        this.apellido1 = apellido1;
        this.apellido2 = apellido2;
        this.carreraNivel = carreraNivel;
        this.id = id;
        this.identificacion = identificacion;
        this.nombre = nombre;
    }
    
    public boolean getPendiente(){
        if(lstEstudiantePlantilla.size() == 0 ) return false; else return getLstEstudiantePlantilla().get(0).getPendiente();
    }

    public String getApellido1() {
        return apellido1;
    }

    public void setApellido1(String apellido1) {
        this.apellido1 = apellido1;
    }

    public String getApellido2() {
        return apellido2;
    }

    public void setApellido2(String apellido2) {
        this.apellido2 = apellido2;
    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getIdentificacion() {
        return identificacion;
    }

    public void setIdentificacion(String identificacion) {
        this.identificacion = identificacion;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public List<EstudiantePlantilla> getLstEstudiantePlantilla() {
        return lstEstudiantePlantilla;
    }

    public void setLstEstudiantePlantilla(List<EstudiantePlantilla> lstEstudiantePlantilla) {
        this.lstEstudiantePlantilla = lstEstudiantePlantilla;
    }

    public EstudiantePlantilla addEstudiantePlantilla(EstudiantePlantilla estudiantePlantilla) {
        getLstEstudiantePlantilla().add(estudiantePlantilla);
        estudiantePlantilla.setEstudiante(this);
        return estudiantePlantilla;
    }

    public EstudiantePlantilla removeEstudiantePlantilla(EstudiantePlantilla estudiantePlantilla) {
        getLstEstudiantePlantilla().remove(estudiantePlantilla);
        estudiantePlantilla.setEstudiante(null);
        return estudiantePlantilla;
    }

    public void setCarreraNivel(CarreraNivel carreraNivel) {
        this.carreraNivel = carreraNivel;
    }

    public CarreraNivel getCarreraNivel() {
        return carreraNivel;
    }
}
